import axios from 'axios'
import store from '@/store/index'
// 导入自定义history对象
import customHistory from '@/utils/history.js'
import { message } from 'antd'
import { logout } from '@/store/action/login'

// console.log('路由对象：', customHistory)
// 创建axios实例
export const request = axios.create({
  // 后台基础地址
  baseURL: 'http://geek.itheima.net/v1_0',
  timeout: 5000
})

// 请求拦截器，发请求之前
request.interceptors.request.use((config) => {
  // 场景：为header统一添加token
  // console.log(config)
  const { login } = store.getState()
  if (login) {
    config.headers.Authorization = `Bearer ${login}`
  }
  return config
}, (error) => {
  return Promise.reject(error)
})

// 响应拦截器，先获取到后台的response
request.interceptors.response.use((res) => {
  // 1.请求成功，进入到这里
  // 简化数据返回,这里返回后，页面或action函数中才能获取到返回的数据
  return res.data
}, (error) => {
  // 2.请求失败
  // 场景：处理401token失败，跳回登录页
  if (error.response.status === 401) {
    /**
     * 处理401token失效:
     * 1. 错误提示消息
     * 2. 清除本地token和用户信息
     * 3. 跳回登录页，携带当前页面地址（下次成功登录，可以跳回401的时候访问的页面）
     */
    message.error(error.response.data.message)
    store.dispatch(logout())
    // 在js中怎么跳页面？1. 不能用 useHistory（） 2. 没有路由实例
    // 使用customHistory跳转
    customHistory.replace({
      pathname: '/login',
      state: {
        from: customHistory.location.pathname
      }
    })
  }
  return Promise.reject(error)
})

export default request
